/*
题目：二叉树展开为链表
给你二叉树的根结点 root ，请你将它展开为一个单链表：

    展开后的单链表应该同样使用 TreeNode ，其中 right 子指针指向链表中下一个结点，而左子指针始终为 null 。
    展开后的单链表应该与二叉树 先序遍历 顺序相同。
https://leetcode.cn/problems/flatten-binary-tree-to-linked-list/
 */
public class Flatten {
    public void flatten(TreeNode root) {
        while (root != null) {
            if (root.left != null) {
                TreeNode leftChild = root.left;
                TreeNode precess = leftChild;
                while (precess.right != null) { //跑到当前最右的孩子
                    precess = precess.right;
                }
                precess.right = root.right;
                root.left = null;
                root.right = leftChild;
            }
            root = root.right;
        }
    }
}
